﻿package frEngine.animateControler.particleControler.animate
{
    import __AS3__.vec.*;
    import flash.geom.*;
    import frEngine.animateControler.particleControler.*;

    public class UseRotateAsix extends Object implements IParticleAnimate
    {
        private var axis:String;
        private var speed:Number;
        public static const instance:UseRotateAsix = new UseRotateAsix;

        public function UseRotateAsix()
        {
            return;
        }// end function

        public function get objClass() : Class
        {
            return UseRotateAsix;
        }// end function

        public function canOpen(param1:ParticleParams) : Boolean
        {
            return param1.useRotateAxisY;
        }// end function

        public function initParticle(param1:ParticleItem) : void
        {
            return;
        }// end function

        private function rotateX(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            var _loc_6:int = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (_loc_4.visible && _loc_4.toUpdate)
                {
                    _loc_7 = this.speed * _loc_4.curFrame;
                    _loc_5 = _loc_4.resultPos;
                    _loc_8 = Math.sqrt(_loc_5.z * _loc_5.z + _loc_5.y * _loc_5.y);
                    _loc_5.z = Math.cos(_loc_7) * _loc_8;
                    _loc_5.y = Math.sin(_loc_7) * _loc_8;
                }
                _loc_6++;
            }
            return;
        }// end function

        private function rotateY(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            var _loc_6:int = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (_loc_4.visible && _loc_4.toUpdate)
                {
                    _loc_7 = this.speed * _loc_4.curFrame;
                    _loc_5 = _loc_4.resultPos;
                    _loc_8 = Math.sqrt(_loc_5.x * _loc_5.x + _loc_5.z * _loc_5.z);
                    _loc_5.x = Math.cos(_loc_7) * _loc_8;
                    _loc_5.z = Math.sin(_loc_7) * _loc_8;
                }
                _loc_6++;
            }
            return;
        }// end function

        private function rotateZ(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            var _loc_6:int = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (_loc_4.visible && _loc_4.toUpdate)
                {
                    _loc_7 = this.speed * _loc_4.curFrame;
                    _loc_5 = _loc_4.resultPos;
                    _loc_8 = Math.sqrt(_loc_5.x * _loc_5.x + _loc_5.y * _loc_5.y);
                    _loc_5.x = Math.cos(_loc_7) * _loc_8;
                    _loc_5.y = Math.sin(_loc_7) * _loc_8;
                }
                _loc_6++;
            }
            return;
        }// end function

        public function update(param1:ParticleStatus) : void
        {
            if (this.axis == "x")
            {
                this.rotateX(param1);
            }
            else if (this.axis == "y")
            {
                this.rotateY(param1);
            }
            else if (this.axis == "z")
            {
                this.rotateZ(param1);
            }
            return;
        }// end function

        public function init(param1:ParticleStatus, param2:ParticleParams) : void
        {
            this.axis = param2.rotateAxisFlag;
            this.speed = param2.rotateAxisYSpeed;
            return;
        }// end function

    }
}
